Problem statement: zenit13ckf
F: Mutácia Johnyho Burgra |
25 bodov | Časový limit: 100 ms |
Po zahraničí sa dostávame aj k slovenskému hernému priemyslu. Medzi významných
predstaviteľov časov minulých patrí aj klasická point and click adventúra z roku 1996 menom
Mutácia Johnyho Burgra. Malý Johny sa omylom stal obeťou nevydareného experimentu, po ktorom
mu zostala hlava prasiatka. Úlohou hráča je pomôcť Johnymu vypátrať šialeného profesora, ktorý jediný mu môže
vrátiť jeho pôvodnú podobu.
Xerno padal do kanálovej šachty a hlasom Joža Pročka kričal, že sa pomstí. Johny ale vedel, že
týchto výstrah sa teraz nemusí báť a tešil sa z toho, že konečne môže vniknúť do
jeho domu a skúsiť zistiť viac o únose profesora Foogla. Samozrejme, musí sa vyhnúť kúpeľni, v ktorej sa kúpe nič netušiaca Xernova žena.
Johny našiel Xernov počítač. Ten je ale zaheslovaný, čo ešte zintenzívnilo Johnyho dojem, že v
sebe skrýva zaujímavé informácie. Pod kobercom našiel papierik s číslami - nie je ich veľa a všetky
sú medzi 0 a 255 vrátane. Že by sme skúsili známe kódovanie pod menom base64? Pomôžte Johnymu a
nájdite reťazec, ktorý je výsledkom zakódovania uvedenej postupnosti čísel.
Kódovanie base64 dostáva ako vstup postupnosť bajtov (čísel medzi 0 a 255) a kóduje ju do
reťazca pozostávajúceho z písmen anglickej abecedy a iných znakov. Pozemšťania ho používajú
napríklad v e-mailových serveroch, mimozemšťania zvyčajne na heslovanie počítačov.
Popis tohto kódovania začneme tým, že priradíme číslam 0 až 63 znaky. Hodnoty 0 až 25 vrátane budú
zodpovedať veľkým písmenám anglickej abecedy (v poradí, v akom v nej nasledujú). Hodnoty 26 až 51
budú zodpovedať malým písmenám anglickej abecedy (znaku 'b' priradíme 27, znaku 'c' priradíme 28, atď.).
Hodnoty 52 až 61 priradíme znakom (nie číslam) '0' až '9'. Číslu 62 bude prislúchať znak
'+' a číslu 63 znak '/'. Úvodzovky sú pri znakoch len pre názornosť.
Aby sme ďalej mohli pokračovať vo vysvetľovaní, musíme začať uvažovať v binárnej sústave. Vezmime si
prvé tri bajty zo vstupnej postupnosti. Každý z nich sa dá zapísať v binárnej sústave ako osemmiestny reťazec
núl a jednotiek. Ak si zapíšeme tieto reťazce za sebou, dostaneme postupnosť núl a jednotiek, ktorá
bude dlhá 24. Túto postupnosť rozsekáme na štyri úseky dlhé 6. Každý z týchto štyroch úsekov je
binárne zapísané šesťbitové číslo, teda číslo medzi 0 a 63 vrátane. Výstupný kód trojice bajtov budú štyri znaky
zodpovedajúce týmto hodnotám.
Uvažujme napríklad trojicu bajtov 2 26 35. Zapíšme si tieto čísla binárne za sebou
+--------+--------+--------+
|00000010|00011010|00100011|
+--------+--------+--------+
Rozdeľme teraz tento reťazec na 4 podreťazce dlhé 6
+------+------+------+------+
|000000|100001|101000|100011|
+------+------+------+------+
Prvá šestica je binárny zápis čísla nula. Ďalšie tri šestice sú čísla 33, 40 a 35. Ak tieto čísla
prepíšeme na znaky podľa kódovania, ktoré sme si popísali vyššie, dostávame 'Ahoj'.
Celé kódovanie prebieha tak, že postupne berieme trojice bajtov a tie kódujeme do štvoríc písmen. Ak
na konci zostane menej ako tri bajty, tak sa potrebný počet bajtov do trojice doplní. Doplnené bajty
majú vždy hodnotu nula.
Na vstupe sa nachádza jediný riadok, na ktorom je vstupná postupnosť. Načítavajte až do konca
vstupného súboru. Na vstupe bude aspoň jedno a najviac 100 čísel, medzi dvoma číslami bude jedna medzera.
Všetky budú celé a medzi 0 a 255 vrátane. Na výstup vypíšte jediný riadok - zakódovaný reťazec.
>
Príklady:
| |
255 255 255 0 0 0 254 254 254 127
|
| |